
// let p = Promise.resolve( 123 );
// p.then( value => console.log( value ) );
// p = Promise.reject(456);
// p.catch( value => console.log( value ) );

let task0 = ()=>{
    console.log( 2 );
}

let task1 = ()=>{
    console.log( 1 );
    // 调用 setTimeout 会导致向 宏任务 队列中添加一个宏任务
    setTimeout( task0 , 0 );
}

let task2 = () => {
    console.log( 3 );
    let p = Promise.resolve();
    p.then( ()=> {
        console.log( 4 );
    });
    console.log( 5 );
}

// 得到一个被肯定的 Promise 实例
let p = Promise.resolve();
// 等到当前宏任务执行结束后就会执行p.then产生的微任务
p.then( task1 );

// 调用 setTimeout 函数本身 与 未来的 task2 执行是两回事
// 调用 setTimeout 会导致向 宏任务 队列中添加一个宏任务
setTimeout( task2 , 0);

console.log( 6 );